package models

import (
	"os"
	"path/filepath"
	"strings"
)

//遍历文件夹，统计文件个数
func CountDicomFile(dir string) error {

	_, err := os.Stat(dir)
	if err != nil {
		Log.FATAL("未找到%v文件夹，请确认配置文件是否正确", dir)
		panic("dicom文件目录不存在，请检查配置文件中设置项")
	}
	//fix 读取文件夹 就写入数据中，避免一次读取太多，卡死
	err = filepath.Walk(dir, Listfunc)
	if err != nil {
		Log.FATAL("解析文件异常")
		return err
	}
	DicomFileCount = int64(len(ListDicomFile))
	if DicomFileCount == 0 {
		Log.FATAL("文件夹%v中无dicom文件", Config.DicomFilePath)
		panic("文件夹中未查看dicom文件~!!，请检查")
	}
	Log.DEBUG("文件夹解读完成～！！")
	return nil
}

//文件夹遍历
//fix 当执行程序不在问题所在目录时，需要正确的完整目录
func Listfunc(path string, f os.FileInfo, err error) error {
	var strRet string
	// strRet, _ = os.Getwd()
	// // strRet = "."
	// ostype := runtime.GOOS
	// if ostype == "windows" {
	// 	strRet += "\\"
	// } else if ostype == "linux" || ostype == "darwin" {
	// 	strRet += "/"
	// }

	if f == nil {
		return err
	}
	if f.IsDir() {
		return nil
	}
	strRet += path //+ "\r\n"
	//用strings.HasSuffix(src, suffix)//判断src中是否包含 suffix结尾
	ok := strings.HasSuffix(strRet, ".dcm")
	if ok {
		ListDicomFile = append(ListDicomFile, strRet) //将目录push到listfile []string中
	}
	return nil
}

//联合查询 两个表中未处理数据
func CountrastFile() []*FileInfo {
	var awaitddata []*FileInfo
	result := DBConn.Raw("SELECT file_infos.id,file_infos.dir,file_infos.file_name  FROM file_infos LEFT JOIN dicom_infos on file_infos.id = dicom_infos.file_info_id WHERE dicom_infos.id is NULL").Scan(&awaitddata)
	if result.Error != nil {
		Log.ERROR("对比查询错误", result.Error.Error())
	}

	return awaitddata

}

//统计数据中dicom信息
func CountDiomFromDB() int {
	var c int
	DBConn.Raw("select count(*) from dicom_infos").Scan(&c)
	return c
}

//统计 读取文件数
// func FileToMemProgress() {
// 	defer Wait.Done()
// 	for {
// 		count := len(ListDicomFile)
// 		Log.INFO("当前读取文件名%d条", count)
// 		if DicomFileCount > 0 {
// 			break
// 		} else {
// 			time.Sleep(10 * time.Second)
// 		}
// 	}
// }
